﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using CapaDeDominio;

namespace CapaDeDatos.EF
{
    public class InstrumentoDAO : IInstrumentoDAO
    {


        #region IInstrumentoDAO Members

        public ICollection<Instrumento> ObtenerXCaracteristica(String caracteristicas)
        {
            using (EFContext db = new EFContext(ConexionUtil.ObtenerCadena()))
            {
                var resultado = from l in db.Instrumentos
                                .Include("Tipo")
                                where l.Caracteristicas.Contains(caracteristicas)
                                select l;
                return resultado.ToList();
            }
        }

        #endregion

        #region IBaseDAO<Instrumento,int> Members

        /// <summary>
        /// Registro de instrumentos
        /// </summary>
        /// <param name="entidad"></param>
        /// <returns></returns>
        public Instrumento Crear(Instrumento entidad)
        {
            using (EFContext db = new EFContext(ConexionUtil.ObtenerCadena()))
            {
                int? codigo = db.Instrumentos.Select(l => (int?)l.Codigo).Max();
                entidad.Codigo = (codigo ?? 0) + 1;
                db.Maestras.Attach(entidad.Tipo);
                db.Instrumentos.Add(entidad);
                db.SaveChanges();
            }
            return Obtener(entidad.Codigo);
        }

        public Instrumento Obtener(int id)
        {
            using (EFContext db = new EFContext(ConexionUtil.ObtenerCadena()))
            {
                var instrumento = from l in db.Instrumentos
                               .Include("Tipo")
                               where l.Codigo == id
                               select l;
                return instrumento.SingleOrDefault();
            }
        }

        public void Eliminar(Instrumento itemEliminar)
        {
            using (EFContext db = new EFContext(ConexionUtil.ObtenerCadena()))
            {
                Instrumento instrumento = db.Instrumentos.Single(i => i.Codigo == itemEliminar.Codigo);
                db.Instrumentos.Remove(instrumento);
                db.SaveChanges();
            }
        }
        /// <summary>
        /// Lista todos los instrumentos
        /// </summary>
        /// <returns></returns>
        public ICollection<Instrumento> ListarTodos()
        {
            using (EFContext db = new EFContext(ConexionUtil.ObtenerCadena()))
            {
                var resultado = from l in db.Instrumentos
                                .Include("Tipo")
                                select l;
                return resultado.ToList();
            }
        }

        #endregion

    }
}